/**
 * 
 */
package com.firmye.codereposboot.config.security;

import com.firmye.codereposboot.model.user.pojo.Role;
import com.firmye.codereposboot.model.user.pojo.User;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;


/**
 * @Author Firmye
 * @Date 2017年12月6日 下午11:54:29
 * 
 * @Description 1.自定义UserDetails
 */
@Getter
@Setter
@Slf4j
public class CustomUserDetails implements UserDetails {

	private User user;
	private List<Role> roles;

	public CustomUserDetails() {
		super();
	}

	public CustomUserDetails(User user, List<Role> roles) {
		super();
		this.user = user;
		this.roles = roles;
	}

	/**
	 * @Author Firmye
	 * @Date 2017年12月7日 上午12:23:45
	 *
	 * @Description 获取用户权限
	 */
	@Override
	public Collection<? extends GrantedAuthority> getAuthorities() {
		Collection<GrantedAuthority> authorities = new ArrayList();
		if (null != roles && roles.size() > 0) {
			for (Role r : roles) {
				SimpleGrantedAuthority authority = new SimpleGrantedAuthority(r.getRoleName());
				authorities.add(authority);
			}
		}

		log.info("=====> Current user authorities：" + authorities);

		return authorities;
	}

	/**
	 * @Author Firmye
	 * @Date 2017年12月7日 上午12:23:45
	 *
	 * @Description
	 */
	@Override
	public String getPassword() {
		// TODO Auto-generated method stub
		return user.getPassword();
	}

	/**
	 * @Author Firmye
	 * @Date 2017年12月7日 上午12:23:45
	 *
	 * @Description
	 */
	@Override
	public String getUsername() {
		// TODO Auto-generated method stub
		return user.getUsername();
	}

	/**
	 * @Author Firmye
	 * @Date 2017年12月7日 上午12:23:45
	 *
	 * @Description
	 */
	@Override
	public boolean isAccountNonExpired() {
		// TODO Auto-generated method stub
		return true;
	}

	/**
	 * @Author Firmye
	 * @Date 2017年12月7日 上午12:23:45
	 *
	 * @Description
	 */
	@Override
	public boolean isAccountNonLocked() {
		// TODO Auto-generated method stub
		return true;
	}

	/**
	 * @Author Firmye
	 * @Date 2017年12月7日 上午12:23:45
	 *
	 * @Description
	 */
	@Override
	public boolean isCredentialsNonExpired() {
		// TODO Auto-generated method stub
		return true;
	}

	/**
	 * @Author Firmye
	 * @Date 2017年12月7日 上午12:23:45
	 *
	 * @Description
	 */
	@Override
	public boolean isEnabled() {
		// TODO Auto-generated method stub
		return true;
	}

}
